package liwen.zhao.service;

import liwen.zhao.common.jd.utils.UploadUtil;
import liwen.zhao.common.jd.vo.PicUploadResult;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.util.UUID;

@Service
public class FileUploadServiceImpl implements  PicUploadService{
    @Value("${fileRootDir}")
    private String fileRootDir;
    @Value("${fileUrlPre}")
    private String fileUrlPre;
    @Override
    public PicUploadResult doFileUp(MultipartFile pic) {
        /*
            1.验证图片合法,通过后缀名 .png .jpg .gif等的后缀是合法
            2.生成一个多级路径
                /upload/a/c/3/d/3/f/4/h/
                磁盘路径使用
                url地址
            3.重命名图片名称,存储到静态文件夹下的路径中
                ${fileRootDir}/upload/a/c/3/d/3/f/4/h/asdljflasj-asdlkfjsad-sdakf.jpg
            4.对应存储的地址,生成一个可访问的url
                http://image.jt.com/upload/a/c/3/d/3/f/4/h/asdljflasj-asdlkfjsad-sdakf.jpg
         */
        //准备一个业务逻辑执行过程,和结束时返回的对象
        PicUploadResult result=new PicUploadResult();
        //拿到图片原文件名称
        String oName = pic.getOriginalFilename();
        //moon.jpg 从字符串截取最后一个.到结尾sadljfsl-0231lkdslf23.ext
        String extName = oName.substring(oName.lastIndexOf("."));
        //正则表达式判断后缀是否合法
        boolean matches = extName.matches(".(png|jpg|gif|bmp|jpeg)$");
        //关心不合法,生成对象,设置error=1 返回对象,后续逻辑不执行了
        if(!matches){
            //说明后缀不合法
            result.setSuccess(1);
            return result;
        }
        //生成一个多级路径 /jd/4/f/e/5/t/g/f/g/
        String dir="/"+ UploadUtil.getUploadPath(oName,"jd")+"/";
        //创建磁盘的文件夹
        String path=fileRootDir+dir;//${fileRootDir}/4/f/e/5/t/g/f/g/
        File _dir=new File(path);
        //判断文件夹是否存在,不存在则创建
        if(!_dir.exists()){
            //说明文件夹不存在
            _dir.mkdirs();
        }
        //将pic的二进制数据做成一个文件输出到这个目录
        //重命名图片名称
        try{
            String nName= UUID.randomUUID().toString()+extName;
            String file=path+nName;//${fileRootDir}/4/f/e/5/t/g/f/g/asldjf-alfjs-asdlfjs.jpg
            pic.transferTo(new File(file));//可以直接将pic对象的文件输出到一个磁盘文件中
            //拼接url
            String url=fileUrlPre+dir+nName;
            result.setUrl(url);
            return result;
        }catch(Exception e){
            e.printStackTrace();
            result.setSuccess(1);
            return result;
        }
    }
}
